home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 February: Tool Chest / Apple Developer CD Series Tool Chest February 1996 (Apple Computer)(1996).iso / Sample Code / AOCE Sample Code / PowerTalk Access Modules / Sample SMSAM / SampleSMSAM Source / CoreGateway / LetterLog.cp < prev    next >
Encoding:
Text File  |  1995-07-28  |  6.8 KB  |  283 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        LetterLog.cp
  3.  
  4.     Copyright:    © 1991-1994 by Apple Computer, Inc.
  5.                 All rights reserved.
  6.  
  7.     Part of the AOCE Sample SMSAM Package.  Consult the license
  8.     which came with this software for your specific legal rights.
  9.  
  10. */
  11.  
  12.  
  13.  
  14. #ifndef __LETTERLOG__
  15. #include "LetterLog.h"
  16. #endif
  17.  
  18. #ifndef __LETTER__
  19. #include "Letter.h"
  20. #endif
  21.  
  22. #ifndef __ABSTRACTFILE__
  23. #include "AbstractFile.h"
  24. #endif
  25.  
  26. #ifndef    __DEBUGGINGEAR__
  27. #include "DebuggingGear.h"
  28. #endif
  29.  
  30. #ifndef    __DEBUGASSERT__
  31. #include "DebugAssert.h"
  32. #endif
  33.  
  34. #pragma segment LetterLog
  35.  
  36. TLetterLog* gBovineLetterLog = nil;
  37.  
  38. /***********************************|****************************************/
  39.  
  40. TLetterLog::TLetterLog ( const TFileSpec& file, TPurgeCriteria* purgeCriteria ):
  41.     TDiskLog ( file, purgeCriteria )
  42. {
  43. }
  44.  
  45. /***********************************|****************************************/
  46.  
  47. TLetterLog::~TLetterLog ()
  48. {
  49. }
  50.  
  51. /***********************************|****************************************/
  52.  
  53. TLogEntry*
  54. TLetterLog::ReconstructEntryFromInfoAtCurrentMark ()
  55. {
  56.     return new TLetterLogEntry;
  57. }
  58.  
  59. /***********************************|****************************************/
  60.  
  61. Boolean
  62. TLetterLog::AddLetter ( const TLetter* letter )
  63. {
  64.     if ( letter )
  65.     {
  66.         TLetterLogEntry entry ( *letter );
  67.         return ASSERT ( TDiskLog::AddEntry ( entry ) );
  68.     }
  69.     else
  70.     {
  71.         return false;
  72.     }
  73. }
  74.  
  75. /***********************************|****************************************/
  76.  
  77. TLetterLogEntry*
  78. TLetterLog::CreateLetterEntry ( EntryIndex index )
  79. {
  80.     return (TLetterLogEntry*) TDiskLog::CreateEntry ( index );
  81. }
  82.  
  83. /***********************************|****************************************/
  84.  
  85. Boolean
  86. TLetterLog::AddEntry ( TLogEntry& entry )
  87. {
  88.     return ASSERT ( TDiskLog::AddEntry ( entry ) );
  89. }
  90.  
  91. /***********************************|****************************************/
  92.  
  93. TLogEntry*
  94. TLetterLog::CreateEntry ( EntryIndex index )
  95. {
  96.     return TDiskLog::CreateEntry ( index );
  97. }
  98.  
  99. /***********************************|****************************************/
  100. /***********************************|****************************************/
  101.  
  102. TLetterLogEntry::TLetterLogEntry ():
  103.     TLogEntry (),
  104.     fSender (),
  105.     fSubject (),
  106.     fStatus ( kUnknown ),
  107.     fMessage ()
  108. {
  109. }
  110.  
  111. /***********************************|****************************************/
  112.  
  113. TLetterLogEntry::TLetterLogEntry ( const TLetter& letter ):
  114.     TLogEntry (),
  115.     fSender (),
  116.     fSubject (),
  117.     fStatus ( DetermineLetterStatus ( letter ) ),
  118.     fMessage ()
  119. {
  120.     ASSERT ( letter.GetLetterID ( fID ) );
  121.     ASSERT ( GetRecipientName ( letter, fromRecipient, 1, fSender ) );
  122.     ASSERT ( GetSubject ( letter, fSubject ) );
  123.     ASSERT ( letter.GetSendTimeStamp ( fTime ) );
  124. }
  125.  
  126. /***********************************|****************************************/
  127.  
  128. TLetterLogEntry::~TLetterLogEntry ()
  129. {
  130. }
  131.  
  132. /***********************************|****************************************/
  133.  
  134. TLetterLogEntry::LetterStatus            
  135. TLetterLogEntry::DetermineLetterStatus ( const TLetter& letter ) const
  136. {
  137.     if ( letter.GetUnknownRecipientCount () > 0 )
  138.         return kNotCompleted;
  139.     else
  140.         return kCompleted;
  141. }
  142.  
  143. /***********************************|****************************************/
  144.  
  145. Boolean
  146. TLetterLogEntry::GetRecipientName ( const TLetter& letter, RecipientTypeSet type, unsigned short index, TRString& string ) const
  147. {
  148.     const TRecipient* recipient = letter.GetRecipient ( type, index );
  149.     ASSERT_RETURN_ZERO ( recipient != nil );
  150.     ASSERT_RETURN_ZERO ( recipient->GetRecipientName ( string ) ); 
  151.  
  152.     return true;
  153. }
  154.  
  155. /***********************************|****************************************/
  156.  
  157. Boolean
  158. TLetterLogEntry::GetSubject ( const TLetter& letter, TRString& string ) const
  159. {
  160.     ASSERT_RETURN_ZERO ( letter.GetSubject ( string ) ); 
  161.  
  162.     return true;
  163. }
  164.  
  165. /***********************************|****************************************/
  166.  
  167. Boolean
  168. TLetterLogEntry::WriteTo ( TAbstractFile& file ) const
  169. {
  170.     ASSERT_RETURN_ZERO ( TLogEntry::WriteTo ( file ) );
  171.     ASSERT_RETURN_ZERO ( noErr == file.WriteDataIgnore ( &((TLetterLogEntry*)this)->fID, sizeof ( fID ) ) );
  172.     ASSERT_RETURN_ZERO ( fSubject.Write ( file ) );
  173.     ASSERT_RETURN_ZERO ( fSender.Write ( file ) );
  174.     ASSERT_RETURN_ZERO ( noErr == file.WriteDataIgnore ( &((TLetterLogEntry*)this)->fTime, sizeof ( fTime ) ) );
  175.     ASSERT_RETURN_ZERO ( noErr == file.WriteDataIgnore ( &((TLetterLogEntry*)this)->fStatus, sizeof ( fStatus ) ) );
  176.     ASSERT_RETURN_ZERO ( fMessage.Write ( file ) );
  177.     return true;
  178. }
  179.  
  180. /***********************************|****************************************/
  181.  
  182. Boolean
  183. TLetterLogEntry::ReadFrom ( TAbstractFile& file )
  184. {
  185.     ASSERT_RETURN_ZERO ( TLogEntry::ReadFrom ( file ) );
  186.     ASSERT_RETURN_ZERO ( noErr == file.ReadDataIgnore ( &fID, sizeof ( fID ) ) );
  187.     ASSERT_RETURN_ZERO ( fSubject.Read ( file ) );
  188.     ASSERT_RETURN_ZERO ( fSender.Read ( file ) );
  189.     ASSERT_RETURN_ZERO ( noErr == file.ReadDataIgnore ( &fTime, sizeof ( fTime ) ) );
  190.     ASSERT_RETURN_ZERO ( noErr == file.ReadDataIgnore ( &fStatus, sizeof ( fStatus ) ) );
  191.     ASSERT_RETURN_ZERO ( fMessage.Read ( file ) );
  192.     return true;
  193. }
  194.  
  195. /***********************************|****************************************/
  196.  
  197. ostream&
  198. TLetterLogEntry::operator >> ( ostream& stream ) const
  199. {
  200.     #if 0
  201.     TLogEntry::operator >> ( stream );
  202.     stream << "letter ID:" << fID << endl;
  203.     stream << "letter sender:" << fSender << endl;
  204.     stream << "letter subject:" << fSubject << endl;
  205.     stream << "letter time:" << fTime << endl;
  206.     stream << "letter status:";
  207.     
  208.     switch ( fStatus )
  209.     {
  210.         case kCompleted:
  211.             stream << "COMPLETED" << endl;
  212.         break;
  213.         
  214.         case kNotCompleted:
  215.             stream << "NOT COMPLETED" << endl;
  216.         break;
  217.         
  218.         case kUnknown:
  219.             stream << "UNKNOWN" << endl;
  220.         break;
  221.         
  222.         default:
  223.             stream << "INVALID" << endl;
  224.         break;
  225.     }
  226.  
  227.     stream << "letter message:" << fMessage << endl;
  228.     #else
  229.     stream << "Entry: " << * (const RString*) fSubject << " " << fID << endl;
  230.     #endif
  231.     
  232.     return stream;
  233. }
  234.  
  235. /***********************************|****************************************/
  236.  
  237. const char*
  238. TLetterLogEntry::GetClass () const
  239. {
  240.     
  241.     return "TLetterLogEntry";
  242. }
  243.  
  244. /***********************************|****************************************/
  245.  
  246. unsigned long
  247. TLetterLogEntry::GetTextLength () const
  248. {
  249.     return TLogEntry::GetTextLength ();
  250. }
  251.  
  252. /***********************************|****************************************/
  253.  
  254. char*
  255. TLetterLogEntry::CreateText () const
  256. {
  257.     return TLogEntry::CreateText ();
  258. }
  259.  
  260. /***********************************|****************************************/
  261.  
  262. void
  263. TLetterLogEntry::GetText ( char* buffer, unsigned long size ) const
  264. {
  265.     TLogEntry::GetText ( buffer, size );
  266. }
  267.  
  268. /***********************************|****************************************/
  269. /***********************************|****************************************/
  270.  
  271. TLetterLogEnumerator::TLetterLogEnumerator ( TLetterLog& log ):
  272.     fImplementation ( log )
  273. {
  274. }
  275.  
  276. /***********************************|****************************************/
  277.  
  278. TLetterLogEnumerator::~TLetterLogEnumerator ()
  279. {
  280. }
  281.  
  282. /***********************************|****************************************/
  283.